Some computer systems store data in an array of redundant storage devices. Since the contents of each storage device in the array are identical, the storage devices may be referred to as “shadow” or “mirror” devices. When a fault occurs that disables one of the mirror devices, the contents of the array may be accessed through another mirror device. As such, the array is designed to increase fault tolerance of the computer system.
When the computer system writes data to the array, a write command is issued to each storage device in the array. If the computer system crashes while issuing the write commands, the data in the storage devices in the array may become inconsistent. To resolve the inconsistency, the contents of storage devices may be compared and, if necessary, merged. In most cases, merging the contents of the storage devices is a time-consuming and bandwidth-intensive process, involving the reading and writing of the entire contents of each storage device.
Bitmaps may be used to increase the performance of the merge process. Bitmaps are logs that mark regions of the array of redundant storage devices as “dirty.” A dirty region represents a portion of the array that has been modified by the computer system. Thus, bitmaps mark the regions of the array that may be inconsistent after a system crash. When performing a merge, only the regions identified as dirty by the bitmaps may be included in the merge process. Since the regions marked as dirty may be a subset of the array, the efficiency of the merge process is increased.
Bitmaps may be stored and maintained in any non-volatile storage device, such as the array of redundant storage devices. Unfortunately, maintaining such bitmaps to record the dirty regions of the array may require a substantial number of input/output (I/O) operations, thereby decreasing the performance of the computer system.